package cn.doitedu.udf

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession

/**
 * @Date 22.4.13
 * @Created by HANGGE
 * @Description
 */
object C01_Demo01 {
  Logger.getLogger("org").setLevel(Level.ERROR)
  def main(args: Array[String]): Unit = {
    val session: SparkSession = SparkSession
      .builder()
      .master("local[*]")
      .appName("获取 spark-sql环境")
      .getOrCreate()

    val df = session.read.option("header" , true).option("inferSchema",true).csv("data/csv/Teacher2.csv")

    // 导入函数
    import  org.apache.spark.sql.functions._
    import session.implicits._
  df.createOrReplaceTempView("x")
    session.sql(
      """
        |select
        |id  ,
        |name ,
        |lower(gender) as  g
        |from x
        |
        |""".stripMargin).show()
    df.select('id ,'name , lower('gender) as "g").show()

    // 自定义函数   接收的数据类型是 String  返回的数据类型是String
    // 1 自定义函数
   val f: String => String = (name:String)=>{
      s"DOITEDU:   $name"
    }
  // 2 注册 session环境中
    session.udf.register("add_msg" , f)
    // 使用  方式01
    session.sql(
      """
        |select
        |id  ,
        |name ,
        |lower(gender) as  g ,
        |add_msg(name)
        |from x
        |""".stripMargin).show()
    // 将函数注册到API中
    // 使用方式02
    val add_msg = udf(f)
    df.select('id ,'name , lower('gender) as "g" , add_msg('name) as "msg_name").show()


  }

}
